Importation et prétraitement des données
data <- read_delim('data_ulule_2019.csv', locale = locale(encoding = stri_enc_get()))
paged_table(data)
## [1] "...1" "absolute_url" "amount_raised" "comments_count"
## [5] "country" "finished" "goal" "is_cancelled"
## [9] "city" "region" "category" "percent"
## [13] "status" "currency" "date_end" "date_start"
## [17] "id" "goal_raised" "lang" "finished.1"
## [21] "news_count"
Supression des variables n’ayant aucun interet
data <- data %>% select(-c("absolute_url","finished.1","percent","city","lang","comments_count","news_count","...1","region"))
Supression des valeurs manquantes et dupliquées
data <- data %>% drop_na() %>% distinct()
On va exclure du périmètre les campagnes annulées.
data<-data %>% filter(is_cancelled =="FALSE")
On va garder ici que les 8 pays qui ont le plus de campagnes
#methode dplyr pour choisir les 8 premiers pays qui ont le plus de campagnes
pays <- data %>%
group_by(country) %>%
summarise(nbre_campagne=sum(is_cancelled==FALSE)) %>%
arrange(desc(nbre_campagne)) %>%
slice(1:8) %>%
select(country)
pays <- as.vector(pays$country)
#On va garder seulement les 8 pays qui ont le plus de campagnes
data<-data %>%filter(country %in% pays)
On va exclure le mois le plus récent ou les données seraient eventuellement incomplètes
most_recent_date <-
data %>% select(date_start) %>% arrange(desc(date_start)) %>% slice(1) %>% mutate(month = month(date_start), year = year(date_start))
month_to_eliminate <-
data %>% filter(
month(date_start) == most_recent_date$month &
year(date_start) == most_recent_date$year
)
data <- data %>% anti_join(month_to_eliminate)
Convertir les devises en EURO
##
## CAD CHF EUR GBP USD
## 744 77 41910 36 16
#Convertir les devises en euro
USD_EUR<-0.88
CAD_EUR<-0.69
CHF_EUR<-0.96
GBP_EUR<-1.17
data <- data%>%
mutate(montant = case_when(currency == "USD" ~ amount_raised*USD_EUR,
currency == "CAD" ~ amount_raised*CAD_EUR,
currency == "CHF" ~ amount_raised*CHF_EUR,
currency == "GBP" ~ amount_raised*GBP_EUR,
currency == "EUR" ~ amount_raised
))
Ajout de la variable nombre de jours des campagnes
data <- data %>%
mutate( nombre_de_jours= day(as.period(difftime(date_end,date_start))))
On va créer une nouvelle variable categories regroupant les 6 principales catégories
## Liste des 6 principales catégories
categories_principales <- data %>%
group_by(category) %>%
summarise(nbre_campagne=sum(is_cancelled==FALSE)) %>%
arrange(desc(nbre_campagne)) %>%
slice(1:6) %>%
select(category)
categories_principales <- as.vector(categories_principales$category)
## creaction d'une fonction
`%!in%` <- Negate(`%in%`)
## Ajout d'une nouvelle variable categories
data<-data %>%
mutate(categories = case_when(category %in% categories_principales~category,
category %!in% categories_principales~"autre"
))
Visualisations
Nombre de campagnes par catégorie (sur 6 catégories / regroupements de catégories)
nombre_categories_bars <- data %>% filter(categories!="autre") %>%
ggplot() + geom_bar(aes(y = categories),fill=1:6)+xlab("Nombre de campagnes")+ylab("Catégories")+
ggtitle("Nombre de campagnes par catégories.")
nombre_categories_bars

ggplotly(nombre_categories_bars)
Nombre de campagnes par pays (sur 8 pays / regroupement de pays)
nombre_pays_bars <- data %>%
ggplot( ) + geom_bar(aes(y = country),fill=1:8)+xlab("Nombre de campagnes")+ylab("Pays")+
ggtitle( "Nombre de campagnes par pays." )
nombre_pays_bars

ggplotly(nombre_pays_bars)
Distribution de la durée des campagnes
# Graphique
distribution_duree <- data %>%
ggplot() + geom_histogram(aes(x = nombre_de_jours),fill=5)+xlab("Durée")+
ggtitle( "Distribution de la durée des campagnes." )
distribution_duree

ggplotly(distribution_duree)
Récupération des valeurs des deux dernières années
# Divisuon des dates de debut en mois et annees
data <- data %>%
mutate(
year_start=year(date_start),
month_start=month(date_start)
)
# Valeurs des deux dernières années
deux_dernieres_annees <- data %>%
select(year_start) %>%
distinct() %>%
arrange(desc(year_start)) %>%
slice(1:2) %>%
select(year_start)
deux_dernieres_annees <- as.vector(deux_dernieres_annees$year_start)
deux_dernieres_annees
## [1] 2019 2018
Evolution du nombre de campagnes crées au fil des mois, sur les deux dernières années
#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel
liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)
nombre_de_campagnes_par_mois <- data %>%
filter(categories %in% liste_categories)%>%
filter( year_start %in% deux_dernieres_annees) %>%
group_by(month_start,year_start) %>%
summarise(nbre_campagnes=sum(is_cancelled==FALSE)) %>%
mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>%
arrange(year_start)
nombre_courbe <- ggplot(data=nombre_de_campagnes_par_mois,aes(x=date,y=nbre_campagnes))+
geom_line(color="blue")+
theme_bw() +
labs(x = "Mois", y = "Nombre de campagnes") +
ggtitle("Evolution du nombre de campagnes par mois")
nombre_courbe

Evolution de la proportion de campagnes financées au fil des mois, sur les deux dernières années
#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel
liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)
proportion_de_campagnes_financees <- data %>%
filter(categories %in% liste_categories)%>%
filter( year_start %in% deux_dernieres_annees) %>%
group_by(month_start,year_start) %>%
summarise(proportion_cam_financees=sum(goal_raised==TRUE)/sum(is_cancelled==FALSE)) %>%
mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>%
arrange(year_start)
proportion_courbe <- ggplot(data=proportion_de_campagnes_financees,aes(x=date,y=proportion_cam_financees))+
geom_line(color="blue")+
theme_bw() +
labs(x = "Mois", y = "Proportion de campagnes financées") +
ggtitle("Evolution de la proportion de campagnes financées")
proportion_courbe

ggplotly(proportion_courbe)
Evolution des montants moyens des campagnes financées au fil des mois / années, sur les deux dernières années
#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel
liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)
montant_moyen_de_campagnes_financees <- data %>%
filter(categories %in% liste_categories)%>%
filter( year_start %in% deux_dernieres_annees & goal_raised==TRUE) %>%
group_by(month_start,year_start) %>%
summarise(montant_moyen=mean(amount_raised)) %>%
mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>%
arrange(year_start)
courbe <- ggplot(data=montant_moyen_de_campagnes_financees,aes(x=date,y=montant_moyen))+
geom_line(color="blue")+
theme_bw() +
labs(x = "Mois", y = "Montant moyen") +
ggtitle("Evolution du montant moyen de campagnes financées")
courbe

Durée médian des campagnes
#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel
liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)
duree_median_des_campagnes <- data %>%
filter(categories %in% liste_categories)%>%
filter( year_start %in% deux_dernieres_annees & goal_raised==TRUE) %>%
group_by(month_start,year_start) %>%
summarise(duree_median=median(nombre_de_jours)) %>%
mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>%
arrange(year_start)
courbe <- ggplot(data=duree_median_des_campagnes,aes(x=date,y=duree_median))+
geom_line(color="blue")+
theme_bw() +
labs(x = "Mois", y = "Durée_median") +
ggtitle("Durée median des campagnes")
courbe

Les dix campagnes aux montants financés les plus élevés
Top10_campagnes_plus_financees <- data %>%
arrange(desc(montant)) %>%
select(id,category,montant,year_start) %>%
slice(1:10)
Top10_campagnes_plus_financees
## # A tibble: 10 x 4
## id category montant year_start
## <dbl> <chr> <dbl> <int>
## 1 56599 Jeux 1246852 2017
## 2 9892 Film et vidéo 681046 2013
## 3 44861 BD 521825 2017
## 4 47009 BD 430433 2017
## 5 41617 Musique 427972 2016
## 6 25191 Jeux 402985 2015
## 7 65304 Edition & Journal. 397883 2018
## 8 19461 Edition & Journal. 376275 2014
## 9 69917 BD 340910 2018
## 10 84043 Solidaire & Citoyen 336470 2019